package com.lhq.lingsi_study_hall.utils;

import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.ChatCompletionRequest;
import com.zhipu.oapi.service.v4.model.ChatMessage;
import com.zhipu.oapi.service.v4.model.ChatMessageRole;

import java.util.ArrayList;
import java.util.List;

import static com.lhq.lingsi_study_hall.constant.AIConstant.STABLE_RANDOM_NUMBER;
import static com.lhq.lingsi_study_hall.constant.AIConstant.UNSTABLE_RANDOM_NUMBER;

/**
 * ChatCLMUtil工具类用于构建聊天完成请求
 */
public class ChatCLMUtil {

    /**
     * 构建同步不稳定请求
     *
     * @param systemMessage 系统消息内容
     * @param userMessage 用户消息内容
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncRequest(String systemMessage, String userMessage,Float isStable){
        return buildSyncRequest(systemMessage,userMessage,Boolean.FALSE,isStable);
    }

    /**
     * 构建同步不稳定请求
     *
     * @param messages 消息列表
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncRequest(List<ChatMessage> messages,Float isStable){
        // 构建并返回聊天完成请求
        return buildSyncRequest(messages,Boolean.FALSE,isStable);
    }

    /**
     * 构建同步请求
     *
     * @param systemMessage 系统消息内容
     * @param userMessage 用户消息内容
     * @param isStream 是否为流式请求
     * @param isStable 稳定性参数
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncRequest(String systemMessage, String userMessage,Boolean isStream,Float isStable){
        // 初始化消息列表
        List<ChatMessage> messages=new ArrayList<>();
        // 创建并添加系统消息
        ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
        messages.add(systemChatMessage);
        // 创建并添加用户消息
        ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
        messages.add(userChatMessage);
        // 构建并返回聊天完成请求
        return   buildSyncRequest(messages,isStream,isStable);
    }

    /**
     * 构建同步请求
     *
     * @param messages 消息列表
     * @param isStream 是否为流式请求
     * @param isStable 稳定性参数
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncRequest(List<ChatMessage> messages,Boolean isStream,Float isStable){
        // 构建并返回聊天完成请求
        return   ChatCompletionRequest.builder()
                .model(Constants.ModelChatGLM4)
                .stream(isStream) //是否开启流式返回
                .invokeMethod(Constants.invokeMethod) //同步调用
                .messages(messages)
                .temperature(isStable)
                .build();
    }


    public static ChatCompletionRequest buildStreamRequest(String systemMessage, String userMessage,Float isStable){
        // 构建并返回聊天完成请求
        return buildSyncRequest(systemMessage,userMessage,Boolean.TRUE,isStable);
    }

    public static ChatCompletionRequest buildStreamRequest(List<ChatMessage> messages){
        // 构建并返回聊天完成请求
        return buildStreamRequest(messages,STABLE_RANDOM_NUMBER);
    }

    public static ChatCompletionRequest buildStreamRequest(List<ChatMessage> messages,Float isStable){
        // 构建并返回聊天完成请求
        return buildSyncRequest(messages,Boolean.TRUE,isStable);
    }

    /**
     * 构建同步稳定请求
     *
     * @param messages 消息列表
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncStableRequest(List<ChatMessage> messages){
        // 构建并返回聊天完成请求
        return buildSyncRequest(messages,STABLE_RANDOM_NUMBER);
    }

    /**
     * 构建同步不稳定请求
     *
     * @param messages 消息列表
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncUnstableRequest(List<ChatMessage> messages){
        // 构建并返回聊天完成请求
        return buildSyncRequest(messages,UNSTABLE_RANDOM_NUMBER);
    }

    /**
     * 构建同步不稳定请求
     *
     * @param systemMessage 系统消息内容
     * @param userMessage 用户消息内容
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncUnstableRequest(String systemMessage, String userMessage){
        // 构建并返回聊天完成请求
        return buildSyncRequest(systemMessage,userMessage,UNSTABLE_RANDOM_NUMBER);
    }

    /**
     * 构建同步稳定请求
     *
     * @param systemMessage 系统消息内容
     * @param userMessage 用户消息内容
     * @return 返回构建的ChatCompletionRequest对象
     */
    public static ChatCompletionRequest buildSyncStableRequest(String systemMessage, String userMessage){
        // 构建并返回聊天完成请求
        return buildSyncRequest(systemMessage,userMessage,STABLE_RANDOM_NUMBER);
    }
}



